#include <iostream>
#include <mutex>
#include <thread>

/**
 * C++ 线程同步与互斥
 *
 *
 * 1. 互斥量（Mutex）
 *
 * 互斥量是一种同步原语，用于防止多个线程同时访问共享资源。当一个线程需要访问共享资源时，它首先
 * 需要锁定（lock）互斥量。如果互斥量已经被其他线程锁定，那么请求锁定的线程将被阻塞，直到互斥量被解锁。(unlock)
 *
 * std::mutex : 用于保护共享资源，防止数据竞争
 *
 *
 * （手动控制）
 * std::mutex mtx;
 * mtx.lock();      //锁定互斥锁。（手动）
 * mtx.unlock();    //释放互斥锁。（手动）
 *
 *  （自动控制）
 *  std::lock_guard 和 std::unique_lock  自动管理锁的获取和释放
 *
 *  std::lock_guard<std::mutex> lock(mtx); //自动锁定和解锁
 *
 * 2. 锁（Locks）
 *
 *
 * 3. 条件变量（Condition Variable）
 *
 *
 * 4. 原子操作（Atomic Operations）
 *
 *
 * 5. 线程局部存储（Thread Local Storage, TLS）
 *
 *
 * 6. 死锁（Deadlock）和避免策略
 *
 */
//1. 互斥量（Mutex）
std::mutex mtx;         //全局互斥量

void safeFunction(){
    mtx.lock();         //请求锁定互斥量
    mtx.unlock();       //释放互斥量
}


int main() {
    std::thread t1(safeFunction);
    std::thread t2(safeFunction);
    t1.join();
    t2.join();
    return 0;
}
